package com.haidong.util;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

/**
 * 由于sqlSession工厂使用频率很高,每次重新生成会浪费资源,只需要一个工厂就可以产生许多sqlSession
 * 于是sqlSession满足单例模式的设计需要
 * 只不过我们不能修改工厂类的构造器,而是通过封装代理实现单例
 */
public class SqlSessionFactoryUtils {
    //使用静态变量将工厂生成的try代码中提升作用域
    private static SqlSessionFactory sqlSessionFactory;
    //静态代码块在类加载的同时生成一个工厂对象,通过函数传递给外部
    static {
        try {
            String resource = "mybatis-config.xml";
            InputStream inputStream;
            inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static SqlSessionFactory getSqlSessionFactory(){
        return sqlSessionFactory;
    }
}
